 var i;
 var phrase_tmp;
 var dernier_mot;

/*
Retourne la requète SQL associé à la phrase 
*/
function lire_phrase(phrase){
	phrase_tmp = phrase;
	i=0;
	var requete = "SELECT * FROM";
	var mot = lire_mot();
	while(dernier_mot!=""){
		if(est_mot_cle(dernier_mot)){
			requete += execute_parametre(dernier_mot);
		}
		else return "Phrase invalide";
	}
	if(requete=="SELECT * FROM")return "";
	return requete;
}

/*
Lit un mot et l'enregistre dans dernier_mot
la fin d'un mot est caractérisé par un espace
*/
function lire_mot(){
	dernier_mot = "";
	var caractere = lire_caractere();
	while(caractere != false || caractere != ' '){
		dernier_mot += caractere;
		caractere = lire_caractere();
	}
	dernier_mot = dernier_mot.toLowerCase();
	if(dernier_mot == "") return false;
	else return true;
}

/*
Lit un caractère et le renvoi
*/
function lire_caractere(){
	if(i>=phrase_tmp.length) return false;
	var caractere = phrase_tmp.charAt(i);
	i=i+1;
	return caractere; 
}

/*
Vrai si dernier_mot est un mot de liaison 
un mot de liaison est un caratère inutil à ne pas prendre en compte dans la phrase
*/
function est_mot_liaison(){
	if(dernier_mot=="à"||dernier_mot=="en" ||dernier_mot=="de" ||dernier_mot=="des"||dernier_mot=="un"||dernier_mot=="une" ||dernier_mot=="le" ||dernier_mot=="la" ||dernier_mot=="les" || dernier_mot=="et" || dernier_mot=="ou")
	{
		 return true;
	}
	else
	{
		return false;
	}
	
}

/*
Renvoie vrai si dernier_mot est un mot clé
*/
function est_mot_cle(mot){
	var res = true;
	switch (mot) {
		case "j'aimerais" :
			break; 
		case "couleur" : 
			break;
		case "à" : 
			break;
		case "pour" : 
			break;
		case "moin" : 
			break;
		case "moins" : 
			break;
		case "plus" : 
			break;
		case "entre" : 
			break;
		
		default :
			res=false;
	}
	return res;
}

function mot_suivant_non_cle(){
	var j = i;
	var res="";
	while(j<phrase_tmp.length && phrase_tmp.charAt(j)!=" "){
		res += phrase_tmp.charAt(j);
		j++;
	}
	return !est_mot_cle(res);
}

function est_couleur(){
	var res = true;
	if(dernier_mot.match(/^bleue?s?/));
	else if (dernier_mot.match(/^rouges?/)) dernier_mot = "rouge";
	else if (dernier_mot.match(/^verte?s?/)) dernier_mot = "vert";
	else if (dernier_mot.match(/^jaunes?/)) dernier_mot = "jaune"; 
	else if (dernier_mot.match(/^noire?s?/)) dernier_mot = "noir"; 
	else if (dernier_mot.match(/^brune?s?/)) dernier_mot = "brun"; 
	else if (dernier_mot.match(/^blanc(he)?s?/)) dernier_mot = "blanc"; 
	else if (dernier_mot.match(/^claire?s?/)) dernier_mot = "clair"; 
	else if (dernier_mot.match(/^foncée?s?/)) dernier_mot = "foncé"; 		
	else res=false;

	return res;
}

/*
Execute la fonction associé au mot clé
*/
function execute_parametre(mot_cle){
	switch (mot_cle) {
		case "j'aimerais" :
			return execute_jaimerais();
			break; 
		case "couleur" : 
			return execute_couleur();
			break;
		case "à" : 
			return execute_a();
			break;
		case "pour" : 
			return execute_pour();
			break;
		case "entre" :
 			return execute_entre();
			break;
		// ...
	}

}

/*
Renvoie un morceau de requète SQL associé au mot clé j'aimerais
*/
function execute_jaimerais(){
	var res = "";
	while(lire_mot() && !est_mot_cle(dernier_mot) && !est_couleur()){
		if(!est_mot_liaison()) res+=dernier_mot+" ";
	}
        res = get_table(res);
	if(est_couleur()) res +=execute_couleur_prems();
	return res;
}

/*
Renvoie un morceau de requète SQL associé au mot clé couleur
*/
function execute_couleur(){
	var res = "AND couleur = \"";
	var est = false;
	var ou = false;
	while(lire_mot() && !est_mot_cle(dernier_mot)){
		if(dernier_mot == "et") est = true;
		else if(dernier_mot == "ou") ou = true;
		else {
			if(est){
				 if(!est_mot_liaison() && est_couleur()) res+="\" OR couleur = \""+dernier_mot;
			}
			else if(ou){
				 if(!est_mot_liaison() && est_couleur()) res+="\" OR couleur = \""+dernier_mot;
			}
			else{
				 if(!est_mot_liaison() && est_couleur()) res+=" "+dernier_mot;
			}
			est = false;
			ou = false;
		}
	}
	return res+"\" ";
}

function execute_couleur_prems(){
	var res = "AND (couleur = \""+dernier_mot;
	var est = false;
	var ou = false;
	while(lire_mot() && !est_mot_cle(dernier_mot)){
		if(dernier_mot == "et") est = true;
		else if(dernier_mot == "ou") ou = true;
		else{
			if(est){
				 if(!est_mot_liaison() && est_couleur()) res+="\" AND couleur = \""+dernier_mot;
			}
			else if(ou){
				 if(!est_mot_liaison() && est_couleur()) res+="\" OR couleur = \""+dernier_mot;
			}
			else{
				 if(!est_mot_liaison() && est_couleur()) res+=" "+dernier_mot;
			}
			est = false;
			ou = false;
		}
	}
	return res+"\") ";
}

function execute_a(){
	var res = "";
	lire_mot();
	switch (dernier_mot){
		case "moins" : 
			lire_mot();
			if(dernier_mot == "de") res = execute_moinde();
			break;
		case "moin" : 
			lire_mot();
			if(dernier_mot == "de") res = execute_moinde();
			break;
		case "plus" :
			lire_mot();
			if(dernier_mot == "de") res = execute_plusde();
			break;
		default : 
			res += "AND (ville LIKE '%";
			res+=dernier_mot;
			var ou = false;
			while(lire_mot() && (!est_mot_cle(dernier_mot) || (dernier_mot == "à" && mot_suivant_non_cle()))){
				if(dernier_mot == "ou" || dernier_mot == "et") ou = true
				else {
					if(ou){
						 res+= "%' OR ville LIKE '%";
						 if(dernier_mot != "à") res+=dernier_mot;
					}
					else if(dernier_mot != "à") res+=" "+dernier_mot;
					ou = false;
				}
			}
			res +="%') ";
			break;
	}
	return res;
}

function execute_pour(){
	var res = "";
	lire_mot();
	switch (dernier_mot){
		case "moins" : 
			lire_mot();
			if(dernier_mot == "de") res = execute_moinde();
			break;
		case "moin" : 
			lire_mot();
			if(dernier_mot == "de") res = execute_moinde();
			break;
		case "plus" :
			lire_mot();
			if(dernier_mot == "de") res = execute_plusde();
			break;
		default : 
			res="AND description = \""+dernier_mot;
			while(lire_mot() && !est_mot_cle(dernier_mot)){
				res+=dernier_mot+" ";
			}
			res+= "\" ";
			break;
	}
	return res;

}

function execute_moinde(){
	var res = "AND prix <= "
	var prix = "";
	while(lire_mot() && !est_mot_cle(dernier_mot)){
		if(dernier_mot != "euros") prix+=dernier_mot;
	}
	prix.replace(",",".");
	if(prix.match(/^[0-9]*€?/)) return res+prix+" ";
	else return "";
}

function execute_plusde(){
	var res = "AND prix >= "
	var prix = "";
	while(lire_mot() && !est_mot_cle(dernier_mot)){
		if(dernier_mot != "euros") prix+=dernier_mot;
	}
	prix.replace(",",".");
	if(prix.match(/^[0-9]*€?/)) return res+prix+" ";
	else return "";
}

function execute_entre(){
	var res = "AND prix BETWEEN("
	var prix = "";
	while(lire_mot() && !est_mot_cle(dernier_mot) && dernier_mot != "et"){
		if(dernier_mot != "euros") prix+=dernier_mot;
	}
	prix.replace(",",".");
	if(prix.match(/^[0-9]*€?/)) res+=prix+",";
	else return "";
	prix="";
	while(lire_mot() && !est_mot_cle(dernier_mot)){
		if(dernier_mot != "euros") prix+=dernier_mot;
	}
	prix.replace(",",".");
	if(prix.match(/^[0-9]*€?/)) res+=prix+") ";
	else return "";
	return res;
}

function execute_taille(){

}

function get_table(def_mot){
	return ' articles WHERE type = \"'+def_mot+'\" ';
}


